/**
 * @ brief 演示pthread_self、tid、thread::get_id的结果
 * thread::get_id、this_thread::get_id、pthread_self返回的结果是一样的。这个值是给glibc使用的。这个值实际上是线程的stack frame pointer
 * tid是独一无二的，给Linux操作系统使用的。系统中所有的线程都有一个自己的值
 * 注意：thread::get_id仅对joinable的线程有效。即，如果一个线程对象代表的线程已经结束了，那么调用get_id会打印以下内容：
 * thread::id of a non-executing thread
 */

#include<iostream>
#include<thread>
#include<pthread.h>
#include<sys/syscall.h>
#include<unistd.h>

void thread1(void)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout<< std::hex << pthread_self() << std::dec << std::endl;
    std::cout<< std::hex << std::this_thread::get_id() << std::dec << std::endl;
    std::cout<< syscall(__NR_gettid) << std::endl;
}

int main(void)
{
    std::thread t1(thread1);
    std::cout<< std::hex << t1.get_id() << std::dec << std::endl;
    t1.join();
}
